﻿/*
SINACOR - BMF&Bovespa
Arquivo: TipoDescontoDiferenciado.cs
Criado em: 20-out-2009 11:31:32
Arquiteto Responsável: WGeneroso.prg
*/
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using Sinacor.Infra.Service.Validation;
using Sinacor.Infra.Service.Common;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation.BusinessRules;

namespace Sinacor.Servico.Bovespa.Corretagem.BusinessLogic
{
    /// <summary>
    /// Lógica de negócio de tipos de desconto diferenciado
    /// </summary>
    public class TipoDescontoDiferenciado : BaseBusinessLogic
    {
        #region Atributos

        ResourceAccess.TipoDescontoDiferenciado _raTipoDescontoDiferenciado = null;
        public int ERRO_OBJETO_NULO = 109515;

        #endregion

        #region Construtores

        public TipoDescontoDiferenciado() 
        {
            this._raTipoDescontoDiferenciado = new ResourceAccess.TipoDescontoDiferenciado();
        }

        #endregion

        #region ConsultarTiposDescontosDiferenciados

        /// <summary>
        /// Consulta os tipos de descontos diferenciados conforme o filtro
        /// </summary>
        /// <param name="parameter">Parâmetro para consultar os tipos de descontos diferenciados</param>
        public List<BusinessEntity.TipoDescontoDiferenciado> ConsultarTiposDescontosDiferenciados(BusinessEntity.Parameter.FiltroTipoDescontoDiferenciado parameter)
        {
            List<BusinessEntity.TipoDescontoDiferenciado> listaDescontosDiferenciados = null;

            if (parameter!=null)
            {
                listaDescontosDiferenciados = this._raTipoDescontoDiferenciado.ConsultarTiposDescontosDiferenciados(parameter);
            }
            else
            {
                throw new BusinessException(ERRO_OBJETO_NULO);
            }

            return listaDescontosDiferenciados;
        }

        #endregion

        #region ObterTipoDescontoDiferenciado

        /// <summary>
        /// Obtem um tipo de desconto diferenciado
        /// </summary>
        /// <param name="parameter">Parâmetro para obter um tipo de desconto diferenciado</param>
        public BusinessEntity.TipoDescontoDiferenciado ObterTipoDescontoDiferenciado(BusinessEntity.Parameter.FiltroTipoDescontoDiferenciadoChave parameter)
        {
            BusinessEntity.TipoDescontoDiferenciado tipoDescontoDiferenciado = null;

            if (parameter != null && parameter.Codigo > 0)
            {
                tipoDescontoDiferenciado = this._raTipoDescontoDiferenciado.ObterTipoDescontoDiferenciado(parameter);
            }
            else
            {
                throw new BusinessException(ERRO_OBJETO_NULO);
            }

            return tipoDescontoDiferenciado;
        }

        #endregion

        #region AlterarTipoDescontoDiferenciado
        /// <summary>
        /// Altera um tipo de desconto diferenciado
        /// </summary>
        /// <param name="entity"></param>
        public void AlterarTipoDescontoDiferenciado(BusinessEntity.TipoDescontoDiferenciado entity)
        {
            //Verificar o diagrama de atividades
            //TipoDescontoDiferenciado.
            //AlterarTipoDescontoDiferenciado()

            if (entity == null)
            {
                throw new BusinessException(ERRO_OBJETO_NULO);

            }
            else
            {
                BusinessRuleValidation.ValidaAlteracaoTipoDescontoDiferenciado validacaoAlteracao = new BusinessRuleValidation.ValidaAlteracaoTipoDescontoDiferenciado();
                validacaoAlteracao.EntityToValidate = entity;
                BusinessRulesValidator validar = new BusinessRulesValidator();
                validar.AddValidation("ValidaAlteracaoTipoDescontoDiferenciado", validacaoAlteracao);
                validar.Validate();

                new ResourceAccess.TipoDescontoDiferenciado().AlterarTipoDescontoDiferenciado(entity);
            }

        }
        #endregion AlterarTipoDescontoDiferenciado

        #region ExcluirTipoDescontoDiferenciado
        /// <summary>
        /// Exclui um tipo de desconto diferenciado
        /// </summary>
        /// <param name="entity"></param>
        public void ExcluirTipoDescontoDiferenciado(BusinessEntity.Parameter.FiltroTipoDescontoDiferenciadoChave entity)
        {
            //Verificar o diagrama de atividades
            //TipoDescontoDiferenciado.
            //ExcluirTipoDescontoDiferenciado()

            if (entity == null)
                //TODO: R2 - throw new BusinessException(ERRO_OBJETO_NULO); ou throw new BusinessException(109351);?
                //throw new BusinessException(ERRO_OBJETO_NULO);
                throw new BusinessException(ERRO_OBJETO_NULO);
            else
            {

                //SinacorValidation validar = new SinacorValidation();
                //validar.AddValidation<BusinessEntity.TipoDescontoDiferenciado>(entity);
                //validar.Validate();
                //validar = null;

                BusinessRuleValidation.ValidaExclusaoTipoDescontoDiferenciado validacaoExclusao = new BusinessRuleValidation.ValidaExclusaoTipoDescontoDiferenciado();
                validacaoExclusao.EntityToValidate = entity;
                BusinessRulesValidator validar = new BusinessRulesValidator();
                validar.AddValidation("ValidaExclusaoTipoDescontoDiferenciado", validacaoExclusao);
                validar.Validate();


                new ResourceAccess.TipoDescontoDiferenciado().ExcluirTipoDescontoDiferenciado(entity);
            }

        }
        #endregion ExcluirTipoDescontoDiferenciado

        #region IncluirTipoDescontoDiferenciado
        /// <summary>
        /// Inclui um tipo de desconto diferenciado
        /// </summary>
        /// <param name="entity"></param>
        public void IncluirTipoDescontoDiferenciado(BusinessEntity.TipoDescontoDiferenciado entity)
        {
            //Verificar diagrama de atividades
            //TipoDescontoDiferenciado.
            //IncluirTipoDescontoDiferenciado()

            if (entity == null)
            {
                //TODO: R2 - Verificar codigo da BE, verificar implementacao
                throw new BusinessException(ERRO_OBJETO_NULO);
            }
            else
            {
                BusinessRuleValidation.ValidaInclusaoTipoDescontoDiferenciado validacaoInclusao = new BusinessRuleValidation.ValidaInclusaoTipoDescontoDiferenciado();
                validacaoInclusao.EntityToValidate = entity;
                BusinessRulesValidator validar = new BusinessRulesValidator();
                validar.AddValidation("ValidaInclusaoTipoDescontoDiferenciado", validacaoInclusao);
                validar.Validate();

                new ResourceAccess.TipoDescontoDiferenciado().IncluirTipoDescontoDiferenciado(entity);
            }
        }
        #endregion
    }
}